// 用户处理函数
// routes/users.js 使用的路由处理函数

// 导入用户数据库模型
const { PersonModel } = require('../db/model')

// 用户登录(写完之后发现全局错误中间件没用了，必须得传递参数)
const login = async (req, res) => {
  // 拿到用户名密码直接使用
  const { username, password } = req.body

  // 去访问数据库进行查询
  const result = await PersonModel.findOne({ username, password })
  console.log(result)
  // 判断, 如果 result 为 null 表示用户名密码错误
  if (!result) return res.send({ code: 0, message: '登录失败, 用户名密码错误' })

  // 代码来到这里, 说明该用户存在
  if (!result.is_status) return res.send({ code: 0, message: '登录失败, 该用户已经被禁用' })

  // 代码来到这里, 说明用户存储, 并且账号状态为启用
  // 需要提前向 session 内存储内容
  req.session.info = { id: result.id, username: result.username, nickname: result.nickname }
  
  res.send({ code: 1, message: '登录成功' ,info:req.session.info})
  
}

// 用户注册
const register = async (req, res) => {
  const { username, password,rpassword,nickname } = req.body
  // 两次密码输入不一致
  if( password !== rpassword ) return res.send({ code: 3, message: '注册失败失败, 两次输入密码不一致' })
  // 向数据库中添加一个新用户
  const result = await PersonModel({ username, password, nickname }).save()
  
  if (result) 
  res.send({
    code: 1,
    message: '添加用户成功'
  })

}

// 用户修改个人信息(因为头像修改后上传的图片
// 在shop文件夹而不是oa文件夹所以显示不出换了之后的头像，但数据库已经修改了)
const update = async (req, res) => {
  // console.log('我是update')
  const {id} = req.session.info
  // console.log(id)
  const {avatar,nickname,age,gender,desc } = req.body
  // console.log(avatar)
  // 2. 操作数据库修改信息
  await PersonModel.findByIdAndUpdate(id, {  avatar, nickname, age, gender, desc })
  req.session.info.nickname = nickname
  // 3. 返回给前端信息
  
  res.send({ code: 1, message: '修改用户成功了' })
}

// 用户注销
const quit = (req, res) => {
  const info = req.session.info
  // console.log(info)
  if(info)  {  req.session.destroy()

  res.send({  code: 1, message: '走通了'})}
  if(!info) { res.send({  code: 3, message: '您还没有登录'})}
}

//用户修改密码
const rpwd = async (req, res) => {
  // console.log('我是rpwd')
  const {oldpassword,password,rpassword} = req.body
  const {id} = req.session.info
  // 判断旧密码对不对
  const result =await PersonModel.findById(id)
  // console.log(result)
  if(oldpassword!==result.password) return res.send({ code: 3, message: '用户旧密码不对' })
  if(password!==rpassword) return res.send({ code: 4, message: '两次密码不一致' })
  if(oldpassword===password)  return res.send({ code:5 , message: '新旧密码不能相同' })

  await PersonModel.findByIdAndUpdate(id, {  password })
  res.send({ code: 1, message: '修改用户成功了' })
} 

module.exports = {
  login,
  register,
  update,
  quit,
  rpwd
}
